package Day_0131.JVM;

/**
 * @author zxc
 * @date 2023/01/31 20:57
 **/
public class Garbage_Collection_Algorithm {
    public static void main(String[] args) {
        /**
         * 垃圾回收算法 ：
         * GC最基础的算法有三种： 标记-清除算法、复制算法、标记-压缩算法，
         * ===》 我们常用的垃圾回收器一般都采用分代收集算法。
         *
         * 1.标记-清除算法
         * “标记-清除”（Mark-Sweep）算法，分为“标记”和“清除”两个阶段：
         * （1）首先标记出所有需要回收的对象，
         * （2）在标记完成后统一回收掉所有被标记的对象。
         *
         * 2.复制算法 ：
         * “复制”（Copying）算法，
         * （1）它将可用内存按容量划分为大小相等的两块，每次只使用其中的一块。
         * （2）当这一块的内存用完了，就将还存活着的对象复制到另外一块上面，然后再把已使用过的内存空间一次清理掉。
         *
         * 3.标记-压缩算法 ：
         * （1）标记过程仍然与“标记-清除”算法一样，但后续步骤不是直接对可回收对象进行清理，
         * （2）而是让所有存活的对象都向一端移动，然后直接清理掉端边界以外的内存
         *
         * 4.分代收集算法 ：
         * “分代收集”（Generational Collection）算法，把Java堆分为新生代和老年代，
         * 这样就可以根据各个年代的特点采用最适当的收集算法。
         * ===》
         * （1）新生代使用复制算法;（由于Survivor1/0区的存在，符合复制算法的精髓;）
         * （2）老年代使用标记-清除算法;
         */
    }
}
